#include <iostream>
#include <vector>
#include <algorithm>

struct Print
{
    void operator()(const int &i)
    {
        std::cout << i << " ";
    }
};

struct CopyElement
{
    int operator()(const int &i)
    {
        return i + 100;
    }
};

struct SumElement
{
    int operator()(const int &i1, const int &i2)
    {
        return i1 + i2;
    }
};

void printLine()
{
    std::cout << std::endl;
}

int main(int argc, char const *argv[])
{

    std::vector<int> v{};
    for (int i = 0; i < 10; i++)
    {
        v.push_back(i);
    }

    std::for_each(v.begin(), v.end(), Print());
    printLine();

    std::vector<int> v2;
    v2.resize(v.size());
    std::transform(v.begin(), v.end(), v2.begin(), CopyElement());

    std::for_each(v2.begin(), v2.end(), Print());
    printLine();

    std::vector<int> v3;
    v3.resize(v.size());
    std::transform(v.begin(), v.end(), v2.begin(), v3.begin(), SumElement());

    std::for_each(v3.begin(), v3.end(), Print());
    printLine();

    std::vector<int> v4;
    // v4.resize(v.size());
    std::transform(v3.begin(), v3.end(),
                   std::back_inserter(v4), // 这是在最后面加上，也就是在原来的size() 上加上，如果原来的size 为10，前面就会有10个零
                   [](int i)
                   { return i + 2; });
    std::for_each(v4.begin(), v4.end(), Print());
    printLine();

    return 0;
}
